﻿
#region 文件信息
/*----------------------------------------------------------------
// 
// 文件名称：	
// 文件功能描述：	
// 设计要求：	
//
// 文 件 名：    PoolManager
// 创建者：      杨程
// 创建日期：	    2022/11/15 9:41:16

//----------------------------------------------------------------*/
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace Vampirewal.Coree.ClassObjectPool
{
    /// <summary>
    /// 对象池管理器
    /// </summary>
    public class PoolManager
    {
        private static PoolManager _instance;
        private static object _objLock = new object();
        public static PoolManager GetInstance
        {
            get
            {
                if (_instance == null)
                    lock (_objLock)
                        if (_instance == null)
                            _instance = new PoolManager();
                return _instance;
            }
        }

        #region 类对象池的使用
        protected Dictionary<Type, object> classObjectPoolDic = new Dictionary<Type, object>();
        /// <summary>
        /// 创建类对象池，创建完成后在外面可以保存ClassObjectPool<T>，然后调用Spawn和Recycle来创建和回收类对象
        /// </summary>
        public Pool<T> GetOrCreateClassObjectPool<T>(int maxCount) where T : class, new()
        {
            Type type = typeof(T);
            object obj = null;
            if (!classObjectPoolDic.TryGetValue(type, out obj) || obj == null)
            {
                Pool<T> newPool = new Pool<T>(maxCount);
                classObjectPoolDic.Add(type, newPool);
                return newPool;
            }
            return obj as Pool<T>;
        }
    #endregion
    }
}
